home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / sbin / update-default-ispell < prev    next >
Text File  |  2008-06-04  |  6KB  |  204 lines

  1. #!/usr/bin/perl -w
  2.  
  3. use Debian::DictionariesCommon q(:all);
  4. use Debconf::Client::ConfModule q(:all);
  5. use Getopt::Long;
  6.  
  7. dico_checkroot ();
  8.  
  9. my $rebuild = '';
  10. my $ignoresymlinks = '';
  11.  
  12. GetOptions ('rebuild'         => \$rebuild,
  13.         'ignore-symlinks' => \$ignoresymlinks);
  14.  
  15. version ('2.0');
  16.  
  17. my $class     = "ispell";
  18. my $libdir    = "/usr/lib/ispell";
  19. my $question  = "dictionaries-common/default-$class";
  20. my $iquestion = "dictionaries-common/invalid_debconf_value";
  21. my $linkdir   = "/etc/dictionaries-common";
  22. my $manual    = '';
  23. my $program   = "update-default-$class";
  24. my $debug     = 1 if exists $ENV{'DICT_COMMON_DEBUG'};
  25. # -- Ispell only stuff
  26. my $emacsen_default      = "nil";
  27. my $cache_dir            = "/var/cache/dictionaries-common";
  28. my $emacsen_default_file = "$cache_dir/emacsen-ispell-default.el";
  29. my $ispell_dicts_list    = "$cache_dir/ispell-dicts-list.txt";
  30. # -- End of ispell only stuff
  31.  
  32. ($ret, $value)  = get ($question);
  33.  
  34. if ($ret == 0 && $value ){
  35.   updatedb ($class);
  36.   my $dictionaries = loaddb ($class);
  37.  
  38.   # Set value to Manual if no elements are present for given class
  39.   unless ( %$dictionaries ) {
  40.     print STDERR "$program: No $class elements installed. Manual forced\n" if $debug;
  41.     $value = "Manual forced (No $class elements installed)";
  42.     set($question,$value);
  43.     go();
  44.   }
  45.  
  46.   # Check if we are in manual mode
  47.   if ( $value =~ m/^Manual.*/i ){
  48.     $ignoresymlinks = "yes";
  49.     $manual         = "yes";
  50.   }
  51.  
  52.   if ( not $ignoresymlinks ) {
  53.  
  54.     # Handle invalid debconf values
  55.     if ( not exists $dictionaries->{$value} ){
  56.       my @available_keys = ();
  57.       foreach ( split (/\s*,\s*/, metaget ($question, "choices")) ){
  58.     # strip leading/trailing whitespace and create a list of available keys
  59.     s/^\s+//;
  60.     s/\s+$//;
  61.     push (@available_keys,$_) if ( exists $dictionaries->{$_} );
  62.       }
  63.       my $choices    = join (', ', sort {lc $a cmp lc $b} @available_keys);
  64.       my $forced_key = $available_keys[0] ||
  65.     die "Selected ispell dictionary:\n" .
  66.     " $value \n" .
  67.     "does not correspond to any installed package in the system\n" .
  68.     "and no alternative ispell dictionary could be selected.\n";
  69.       subst($iquestion,"value",$value);
  70.       fset ($iquestion,"seen","false");
  71.       input("high",$iquestion);                # Warn about what happened
  72.       subst ($question, "choices", $choices);  # Put sane values in debconf choices field
  73.       subst ($question, "echoices", $choices); # Put sane values in debconf echoices field
  74.       set ($question, $forced_key);            # Set debconf value to a sane one
  75.       fset ($question,"seen","false");
  76.       input ("critical", $question);
  77.       title ("dictionaries-common: ispell dictionaries");
  78.       go ();
  79.       ($ret, $value) = get ($question);
  80.       die "\n Could not get a valid value for debconf question:\n" .
  81.     "$question\n"
  82.     if ( $ret != 0 ); # This should never be reached
  83.     }
  84.  
  85.     # Check if links are possible and complain otherwise
  86.     if ( exists $dictionaries->{$value}{"hash-name"} ){
  87.       my $hash   = "$libdir/" . $dictionaries->{$value}{"hash-name"};
  88.       foreach my $i (".hash", ".aff") {
  89.     if (-e "$hash$i") {
  90.       system "ln -fs $hash$i $linkdir/default$i";
  91.     } else {
  92.       die "
  93. When trying to make the default link to a ispell dictionary
  94. the file to link [$hash$i] was not found. Please report this as a bug to the
  95. maintainer of the ispell dictionary package you tried to
  96. select.
  97. In the meantime select other default value for your ispell dictionary.\n";
  98.     }
  99.       }
  100.     } else {
  101.       die "Selected ispell dictionary:\n" .
  102.     " $value \n" .
  103.     "does not contain a hash name entry in the database.\n";
  104.     }
  105.   }
  106.  
  107. # This here is only for ispell, not wordlist
  108.   setsysdefault ($value);
  109.  
  110.   # Printing a plain list with installed ispell dictionaries,
  111.   open (IDICTS,"> $ispell_dicts_list") ||
  112.     die "Could not open $ispell_dicts_list for writing\n";
  113.   foreach ( sort keys %{$dictionaries} ){
  114.     print IDICTS "$_\n";
  115.   }
  116.   close (IDICTS);
  117.  
  118.   # Write ispell default dict for emacsen
  119.   unless ( $manual ){
  120.     if ( exists $dictionaries->{$value}{"emacs-display"}
  121.      and lc($dictionaries->{$value}{"emacs-display"}) eq "no" ){
  122.       $emacsen_default = "nil";
  123.     } elsif ( exists $dictionaries->{$value}{"emacsen-name"} ){
  124.       $emacsen_default = "\"" . $dictionaries->{$value}{"emacsen-name"} . "\"";
  125.     } elsif( exists $dictionaries->{$value}{"hash-name"} ){
  126.       $emacsen_default = "\"" . $dictionaries->{$value}{"hash-name"} . "\"";
  127.     }
  128.   }
  129.   #
  130. }
  131.  
  132. # Printing the default ispell dictionary under emacs
  133. open (EMISDEFAULT,"> $emacsen_default_file");
  134. print EMISDEFAULT ";; File automatically generated by update-default-ispell
  135. ;;
  136. ;; Do not manually edit!! Use select-default-ispell script instead
  137.  
  138. (set-variable \'debian-ispell-dictionary $emacsen_default)\n";
  139. close EMISDEFAULT;
  140.  
  141.  
  142. if ($rebuild) {
  143.  
  144.   updatedb ($class);
  145.  
  146.   # Ispell emacsen + jed support
  147.   build_emacsen_support ();
  148.   build_jed_support ();
  149.   build_squirrelmail_support ();
  150.   system ("ispell-autobuildhash") == 0
  151.       or die "Error running ispell-autobuildhash\n";
  152.   # End of specific ispell support 
  153. }
  154.  
  155. # Local Variables:
  156. #  perl-indent-level: 2
  157. # End:
  158.  
  159. __END__
  160.  
  161. =head1 NAME
  162.  
  163. update-default-ispell - update default ispell dictionary
  164.  
  165. =head1 SYNOPSIS
  166.  
  167.  update-default-ispell [--rebuild] [--ignore-symlinks]
  168.  
  169. =head1 DESCRIPTION
  170.  
  171. WARNING: Not to be used from the command line unless you know very well what you are doing.
  172.  
  173. This program is intended to be called from package postinst
  174. (with B<--rebuild>), from B<select-default-ispell> or
  175. from dictionaries-common
  176. postinst (with B<--ignore-symlinks>).
  177.  
  178. Reads the system default from the debconf database and set default links in
  179. F</etc/dictionaries-common> pointing to the appropriate files in
  180. F</usr/lib/ispell/>.  Also
  181. updates the system-wide setting F</etc/dictionaries-common/ispell-default>.
  182. If option B<--rebuild> is given, rebuilds the
  183. F</var/cache/dictionaries-common/ispell.db> 
  184. and the emacsen, jed, and SquirrelMail support (to be put in
  185. F</var/cache/dictionaries-common/>) from the files in
  186. F</var/lib/dictionaries-common/ispell>
  187.  
  188.  
  189. =head1 OPTIONS
  190.  
  191. --rebuild          Rebuild database, emacsen and jed stuff
  192. --ignore-symlinks  Do not set symlinks
  193.  
  194.  
  195. =head1 SEE ALSO
  196.  
  197. The dictionaries-common policy document
  198.  
  199. =head1 AUTHORS
  200.  
  201. Rafael Laboissiere
  202.  
  203. =cut
  204.